/**************************************************************************** 
 * Meta，一个轻量级的静态分区Hypervisor 
 *
 * 版权(c) , 2022-
 *
 * 作者:
 *      Tupelo Shen <shenwanjiang2013@163.com>
 *
 * Meta是一个自由软件，你可以在遵循GNU GPLv2协议的条件下，重新修改并发布它。
 *
 ***************************************************************************/

#ifndef __TLB_H__
#define __TLB_H__

#include <meta.h>
#include <arch/tlb.h>

#include <mem.h>

static inline void tlb_inv_va(struct addr_space *as, vaddr_t va)
{
    if (as->type == AS_HYP) {
        tlb_hyp_inv_va(va);
    } else if (as->type == AS_VM) {
        tlb_vm_inv_va(as->id, va);
        // TODO: inval iommu tlbs
    }
}

static inline void tlb_inv_all(struct addr_space *as)
{
    if (as->type == AS_HYP) {
        tlb_hyp_inv_all();
    } else if (as->type == AS_VM) {
        tlb_vm_inv_all(as->id);
        // TODO: inval iommu tlbs
    }
}

#endif
